package org.xx.armory.swing.components;

import java.util.Objects;

import static org.apache.commons.lang3.StringUtils.trimToEmpty;

/**
 * 列表选项，可以用于组合框或者列表框。
 */
public class ListItem {
    private final String text;
    private final String value;

    /**
     * 构造组合框选项。
     *
     * @param text
     *         选项的文本，自动去掉首尾空格。
     * @param value
     *         选项的值，自动去掉首尾空格。
     */
    public ListItem(
            String text,
            Object value
    ) {
        this.text = trimToEmpty(text);
        this.value = value != null ? trimToEmpty(value.toString()) : "";
    }

    /**
     * 获取选项的文本。
     *
     * @return 选项的文本。
     */
    public final String getText() {
        return this.text;
    }

    /**
     * 获取选项的值。
     *
     * @return 选项的值。
     */
    public final String getValue() {
        return this.value;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public int hashCode() {
        return this.value != null ? this.value.hashCode() : 0;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean equals(
            Object obj
    ) {
        if (!(obj instanceof ListItem)) {
            return false;
        }
        ListItem other = (ListItem) obj;
        return Objects.equals(this.value, other.value);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String toString() {
        return this.text;
    }
}
